'''
-------------版本 v3.0-----------------
需求：
    1 - 需要对测试用例进行筛选
        全部1，2，3，4，5
        挑选出：优先级高/特定用例bug回归
分析需求：
    用例挑选的方式：
        1 - 全部all
        2 - 只选择某一个用例 tc001
        3 - 连续的用例  tc003 -tc005
        4 - 复合型 ['tc003','tc007-tc009','tc010']

解决方案：
测试反馈：

版本迭代意见：

'''

'''
-------------版本 v4.0-----------------
需求：
    函数调用的参数传递的太多！ 
    get_excel_data(fileDir,'登录模块','URL','标题','前置条件')
    
分析需求：
    配置文件出去
        ini
        yaml
解决方案：
    尽可能使用代码去识别获取！
版本迭代建议：


'''

import os.path

import xlrd
from utils.handle_path import testData_path
def get_excel_data(sheetName,caseName,*args,runCase=['all'],excelDir=None):  # 返回是列表
    '''
    :param excelDir:  用例文件路径
    :param sheetName: 选择SheetName表
    :param caseName:  用例名
    :param args:  获取的数据
    :param runCase:  筛选的用例
    :return: [(),()]
    '''

    excelDir = os.path.join(testData_path, 'res.xls')

    workbook = xlrd.open_workbook(excelDir,formatting_info=True)
    workSheet = workbook.sheet_by_name(sheetName)
    #----------------------------------------------

    colIndexList = []  # 存放用户输入列名对应的列编号
    for i in args:  # ('URL','标题','请求体') 遍历
        colIndexList.append(workSheet.row_values(0).index(i))  # 获取编号

    #-----------------用例筛选-----------------------
    # runCase = ['tc003','tc007-tc009','tc010']
    runlist = [] #运行用例编号表 ['Login001','Login002']
    if 'all' in runCase:
        runlist = workSheet.col_values(0) #全部选择
    else:  #筛选
        #1 - 连续 001 -003
        #2 - 不连续  006.009
        for one in runCase:
            if '-' in one: #连续 001-003   -- ['name001','name002']
                start,end = one.split('-')   #001,003 --- 字符串类型 -- 闭区间
                for i in range(int(start,int(end)+1)):
                    runlist.append(caseName+f'{i:0>3}')
            else:  #不连续  006.009
                runlist.append(caseName+f'{one:0>3}')

    #---------------获取对应的需求的数据--------------------
    reslist = []
    rowIndex = 0  # 行编号初始值
    for one in workSheet.col_values(0):
        if caseName in one and one in runlist:
            # 遍历列编号
            getColData = []
            for num in colIndexList:
                tmp = workSheet.cell(rowIndex,num).value
                if is_json(tmp):  # 是json 转化字典
                    tmp = json.loads(tmp)
                getColData.append(tmp)
            reslist.append(list(getColData))  # [(),()]
        rowIndex += 1  # 行编号 + 1  下一行操作
    return reslist
    # print(reslist)
    # for one in reslist:
    #     print(one)

'''
版本： v3.0 
测试反馈：
    1 - 业务接口需要的是请求体数据： 字典格式，但是get_excel_data 返回的是字符串 json.loads()
    2 - 其他的数据（URL 标题） 本身就是字符串，不需要转化
优化建议
    1 - 加判断是否json格式
'''
import json
def is_json(inData:str):
    try:
        json.loads(inData)
        return True  #是json格式
    except:
        return False


if __name__ == '__main__':
    fileDir = os.path.join(testData_path, 'res.xls')
    # get_excel_data('登录模块', 'Login','请求参数',runCase=['1','3-5','6','all'],excelDir=True)  # 后面加caseName 只取Login 的请求和响应
    a = get_excel_data('登录模块', 'Login', '标题', '请求参数', '响应预期结果')
    b = get_excel_data('我的商铺','updateshopping','标题','请求参数')
    for i in b:
        print(b)